package array

import "fmt"

/*可变长度的数组*/
func Slice() {
	slice := make([]int,0)        //指定长度
	slice2 := make([]int, 3, 5) //可以理解为数组初始化三个，底层数组长度为5两个数组之间可以共享 错误用法：slice2 := make([]int, 5, 3)
	i := 0
	for i = 0; i < 7; i++ {
		slice = append(slice, i) //相当于list的add
	}
	fmt.Printf("slice数组长度%d\n", len(slice)) //长度为12
	_slice := []int{10, 20, 30, 40, 50}
	slice=append(slice,_slice...)
	for i = 0; i < len(slice); i++ {
		fmt.Printf("slice[%d]=%d\n", i, slice[i])
	}
	
	fmt.Printf("slice2数组长度%d\n", len(slice2)) //长度为12
	fmt.Printf("slice2数组长度%d\n", cap(slice2)) //长度为12
	for i = 0; i < 7; i++ {
		slice2 = append(slice2, i) //相当于list的add
	}
	fmt.Printf("slice2数组长度%d\n", len(slice2)) //长度为12
	for i = 0; i < len(slice2); i++ {
		fmt.Printf("slice2[%d]=%d\n", i, slice2[i])
	}

	slice3 := []string{99: "1"}
	for i = 0; i < len(slice3); i++ {
		fmt.Printf("slice2[%d]=%s\n", i, slice3[i])
	}

	//创建空数组
	// 使用 make 创建
	//silce4 := make([]int, 0)

	// 使用 slice 字面值创建
	//slice5 := []int{}

	slice6 := []int{10, 20, 30, 40, 50}
	// 长度为2 (3-1)，容量为4 (cap(slice6)-1)
	newSlice := slice6[1:3]
	for i = 0; i < len(newSlice); i++ {
		fmt.Printf("newSlice[%d]=%d\n", i, newSlice[i])
	}

	//验证数组共享
	newSlice[1] = 35
	fmt.Println(slice6[2])

	/*迭代集合方式  第一个是索引值，第二个是索引位置值的拷贝。注意：返回的是值的拷贝而不是引用*/
	for index, value := range slice6 {
		fmt.Printf("Index: %d  Value: %d\n", index, value)
	}
}
